#ifndef OBJET
#define OBJET

#include "../multimedia/cls_mouse.h" // Classe des gestion du curseur de la souris
#include "../objects/cls_map.h" // objet du monde
#include "../multimedia/cls_primitive_texte.h" // Classe de Texte (Affichage Texte...)

/* ----------------------------------------------------
			Classe
  ----------------------------------------------------- */
class cls_Objet
{

private:

    cls_Mouse * clsMouse_Encours;
    cls_Map * clsMap_Encours;
    cls_PrimitiveTexte * clsPrimTexte_DescObj;
    cls_Dialog* clsDialog;
    cls_Scenario* clsScenario;

    SDL_Surface * p_sdlS_ImageObjet;
    SDL_Rect sdlR_PositionObjet_XY;
    SDL_Rect sdlR_PositionObjet_Decalage;

    StrucObjets * paramObjet;

    int n_CST_ObjetWidth;
    int n_CST_ObjetHeight;
    int n_PositionABS_x;
    int n_PositionABS_y;


    // Message de description de l'objet
    char stMsgDescription[256];
    // Savoir si la souris est dessus
    bool isMouseOver;
    // Savoir la souris était déjà présente lors de l'affichage précédent
    // dans le but de ne pas a savoir si l'on doit rechercher ou pas les textes de descriptions (RANDOM)
    // Le flag devient FALSE:
    //      - A la sortie de la souris de l'objet
    //      - Sur le changement d'action
    // Le flag devient TRUE:
    //      - Après la première récupération du texte
    bool wasMouseOverBefore;


    // Gestion de l'interval de mise à jour
    int n_NextUpdateTime;


    // Gestion de la postive relative de l'objet
    void fct_CalculPositionRelative();
    bool fct_IsConditionValide(string stConditionObject);

public:

    /* ---------------------------- */
	cls_Objet();
	~cls_Objet();
    /* ---------------------------- */

    /* --------- METHODE --------------*/

    // Initialisation de l'objet
    void fct_InitObjet(cls_Mouse * clsMouse_Encours, cls_Scenario* clsScenario, cls_Dialog* clsDialog, cls_Map * clsMap_Encours, cls_PrimitiveTexte * clsPrimTexte_DescObj, StrucObjets * paramObjet);

    // Gestion des évènements pour l'objet
    void fct_HandleInput(SDL_Event event);

    // Dessine le personnage à l'écran
    void fct_DrawObjet(SDL_Surface *p_sdlS_Ecran, int n_CurrentTime);

    // Donne la position
    int fct_GetPosX();
    int fct_GetPosY();
    int fct_GetHeight();
    int fct_GetWidth();

    // Libere les surfaces
    void fct_FreeSurface();

};


#endif
